import http from 'wechat-http'
// 配置接口基本路径
http.baseURL = 'https://live-api.itheima.net/'

http.intercept.response = async ({
  statusCode,
  data,
  config
}) => {
  // 这个时候token失效
  if (statusCode === 401) {
    console.log(config);
    if (config.url.includes('/refreshToken')) {
      console.log('包括了refresh');
      //读取当前的历史栈
      const pageStack = getCurrentPages()
      // 取出当前页面路径，登录成功能跳转到该页面
      const lastPage = pageStack[pageStack.length - 1]
      const redirectURL = lastPage.route
      // 引导用户到登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }
    // 拿到全局的实例
    const app = getApp()
    // 如果本地没有 refresh_token 没有必要刷新 token
    if (!app.refresh_token) return uni.showToast({
      title: '用户登录过期请重新登录',
    })
    // 使用refresh_token更新token
    const res = await http({
      url: '/refreshToken',
      method: 'POST',
      header: {
        Authorization: app.refresh_token
      }
    })
    // 更新token和refresh_token
    app.setToken(res.data.token, res.data.refreshToken)
    // 重新发起请求
    return http(
      Object.assign(config, {
        // 传递新的token
        header: {
          Authorization: app.token
        }
      })
    )
  }
  return data
}
http.intercept.request = (params) => {
  // 读取全局中实例的token
  const {
    token
  } = getApp()
  // 指定一个公共的头信息
  // 初始为空对象后后续可以扩展
  const defaultHeader = {}
  // 追加 token 头信息
  if (token) defaultHeader.Authorization = token
  // 合并自定义头信息和公共头信息 assign对象的合并方法
  // 相同属性，后面对象的属性会覆盖前面的属性
  params.header = Object.assign(defaultHeader, params.header)
  return params
}

wx.http = http

export default http